Skip to main content

Boîte de dialogue : Paramètres du projet: Lumière d'analyse statique

Symbole: _cds_icon_stat_analy_light.png

Une fonction: La boîte de dialogue active les vérifications qui sont effectuées avec la version allégée de CODESYS Analyse statique à chaque fois que le code est généré.

Appeler: Projet → Paramètres du projet commander, Lumière d'analyse statique Catégorie

Astuce

Vous pouvez exclure des lignes de code de l'analyse de code statique en marquant le code avec le {analysis ...} le pragma ou le {attribute 'analysis' := '...'} pragmatique.

Pour plus d'informations, consultez : Analyser le code de manière statique

Vérifications de compilation supplémentaires

SA0033 : variables inutilisées

Détecte les variables qui sont déclarées mais non utilisées dans le code du programme compilé

Pour les variables GVL : si plusieurs applications existent dans un projet, seuls les objets situés sous l'application actuellement active sont affectés. S'il n'y a qu'une seule application, les objets du POUs vue sont également affectés.

SA0028 : chevauchement des zones de mémoire

Détecte les lignes de code où deux ou plusieurs variables réservent la même mémoire

Cela se produit par exemple pour les déclarations suivantes : var1 AT %QB21: INT et var2 AT %QD5: DWORD. Dans ce cas, les deux variables utilisent l'octet 21, ce qui signifie que la plage de mémoire des variables se chevauche.

SA0006 : Accès en écriture à partir de plusieurs tâches

Détecte les variables qui sont écrites par plus d'une tâche

SA0004 : accès en écriture multiple sur la sortie

Détecte les sorties écrites à plusieurs emplacements

Remarque : Aucune erreur n'est émise lorsqu'une variable de sortie (VAR_IN_OUT) est écrit dans différentes branches de IF et CASE déclarations.

Remarque : Un pragma ne peut pas désactiver cette règle.

SA0027 : Utilisations multiples des identifiants

Détecte les utilisations multiples d'un nom/identifiant pour une variable ou un objet (POU) dans le cadre d'un projet

. Les cas suivants sont détectés :
  • Le nom d'une constante d'énumération est le même que celui d'une autre énumération de l'application ou utilisé dans une bibliothèque incluse.

  • Le nom d'une variable est le même que le nom d'un objet dans l'application ou le nom d'une bibliothèque intégrée.

  • Le nom d'une variable est le même que le nom d'une constante d'énumération dans une énumération de l'application ou le nom d'une bibliothèque intégrée.

  • Le nom d'un objet est le même que le nom d'un autre objet dans l'application.

  • Le nom d'une variable est le même que le nom d'une méthode.

  • Le nom d'un objet est le même que le nom d'un objet superordonné ("objet parent").

SA0167 : Signaler des instances de FunctionBlock temporaires

Le contrôle détecte les instances de bloc fonction qui sont déclarées comme variables temporaires. Cela affecte les instances qui sont déclarées dans une méthode ou une fonction ou comme VAR_TEMP, et sont donc réinitialisés à chaque cycle de traitement ou pour chaque appel de POU.

SA0175 : Opération suspecte sur la chaîne

Inactif par défaut

Détecte les emplacements de code suspects pour l'encodage UTF-8

Les constructions suivantes sont incluses :

  • Indexer l'accès à une chaîne à un octet

    Exemple: str[2]

    Un message: Opération suspecte sur la chaîne : accès à l'index '<expression>'

  • Accès d'adresse à une chaîne à un octet

    Exemple: ADR(str)

    Un message: Opération suspecte sur la chaîne : accès possible à l'index '<expression>'

  • Appel d'une fonction de chaîne de la bibliothèque standard à l'exception CONCAT et LEN

    Un message: Opération suspecte sur la chaîne : accès possible à l'index '<expression>'

  • Littéral à un octet contenant des caractères non ASCII

    Exemple:

    str := '99€';

    str := 'Ä';

    Un message: Opération suspecte sur la chaîne : le littéral '<littéral>' contient des caractères non ASCII

Selon le résultat du contrôle, il est conseillé de ne pas activer le Encodage UTF8 pour STRING option de compilation.

Pour plus d'informations, consultez : Options de compilation

Exemple 544. Exemples

SA0003 : Déclarations vides

;
(* Comment *);
iVar;

SA0006 : Accès simultané

FUNCTION_BLOCK ADD_FB
g_iTemp1 := g_iTemp1 + INT#1;
PROGRAM PLC_PRG  //controlled by MainTask
g_iTemp1 := g_iTemp1 + INT#2;
g_xTemp2 := g_iTemp1 > INT#10;
PROGRAM PLC_PRG_1  //controlled by SubTask
g_iTemp1 := g_iTemp1 - INT#3;
g_xTemp2 := g_iTemp1 < INT#-10;

SA0004 : accès en écriture multiple sur la sortie

VAR_GLOBAL
    g_xVar AT %QX0.0 : BOOL ;
    g_iTest AT %QW0 : INT ;
END_VAR
PROGRAM PLC_PRG
IF iCondition < INT#0 THEN
    g_xVar := TRUE;
    g_iTest := INT#12;
END_IF
CASE iCondition OF
    INT#1:
        g_xVar := FALSE;
    INT#2:
        g_iTest := INT#11;
    ELSE
        g_xVar := TRUE;
        g_iTest := INT#9;
END_CASE

SA0006 : Accès en écriture à partir de plusieurs tâches

FUNCTION_BLOCK ADD_FB
g_iTemp1 := g_iTemp1 + INT#1;
PROGRAM PLC_PRG  // Controlled by MainTask
g_iTemp1 := g_iTemp1 + INT#2;
g_xTemp2 := g_iTemp1 > INT#10;
PROGRAM PLC_PRG_1  //Controlled by SubTask
g_iTemp1 := g_iTemp1 - INT#3;
g_xTemp2 := g_iTemp1 < INT#-10;

SA0027 : Utilisation multiple du nom

PROGRAM PLC_PRG
VAR
    ton : INT; // error SA0027
END_VAR

SA0029 : Notation en code différente de la déclaration

UNE PLC_PRG POU et un fnc (fonction) POU existe dans l'arborescence des appareils.

PROGRAM PLC_PRG
VAR
    iVar:INT;
    _123test_var_: INT;
END_VAR
ivar := iVar + 1; // notation different to that in the declaration part ->   SA0029
_123TEST_var_ := _123test_var_INT; // notation different to that in the declaration part ->   SA0029
Fnc(); // notation different to that in the devices tree ->   SA0029

SA0167 : Signaler des instances de FunctionBlock temporaires

PROGRAM PLC_PRG
VAR
END_VAR
VAR_TEMP
    yafb: AFB;
END_VAR

FUNCTION Fun : INT
VAR_INPUT
END_VAR
VAR
    funafb: AFB;
END_VAR
METHOD METH: INT
VAR_INPUT
END_VAR
VAR
    methafb: AFB;
END_VAR


Pour plus d'informations, consultez : Analyser le code de manière statique